package com.ioc;

import com.ioc.config.SpringConfig;
import com.ioc.dao.BookDao;
import com.ioc.dao.UserDao;
import com.ioc.dao.impl.UserDaoImpl;
import com.ioc.proxy.UserDaoProxy;
import com.ioc.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 静态代理：
 * 需求：在执行userdao和bookdao的方法的前后打印 执行前时间和执行完成时间
 * 静态代理：一个代理类只能代理一个目标对象，两个目标对象就需要两个代理类
 * 动态代理：一个代理类可以代理所有对象
 *
 * 静态代理的实现方式：
 * 1 代理类xxproxy必须实现与目标对象一样的接口，实现接口中的方法
 * 2 在代理类中注入目标对象
 * 3 代理对象通过目标对象，调用目标对象的方法
 * 4 增强
 *
 */
public class DITest01 {


    public static void main(String[] args) {
        //让Spring加载配置文件
        //AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

        //使用使用非Spring的方式，测试静态代理
        //1 创建目标对象
        UserDao targetUserDao = new UserDaoImpl();
        //2 创建代理对象
        UserDaoProxy proxyUserDao = new UserDaoProxy();
        //3 将目标对象注入代理对象中
        proxyUserDao.setUserDao(targetUserDao);
        //4 执行方法
        proxyUserDao.save();




    }



}
